package com.fang.ct.producer.bean;

import com.fang.ct.common.bean.Data;
import com.fang.ct.common.bean.DataIn;
import com.fang.ct.common.bean.DataOut;
import com.fang.ct.common.bean.Producer;
import com.fang.ct.common.util.DataUtil;
import com.fang.ct.common.util.NumberUtil;
import sun.util.calendar.LocalGregorianCalendar;

import java.io.IOException;
import java.text.DecimalFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Random;

/**
 * 本地数据文件的生产者
 */
public class LocalFileProducer implements Producer {

    /**
     * 数据来源
     * @param in
     */
    private DataIn in;
    private DataOut out;
    private volatile boolean flg=true; //增强内存可见性

    public void setIn(DataIn in) {
          this.in=in;
    }

    /**
     * 数据输出
     * @param out
     */
    public void setOut(DataOut out) {
          this.out=out;
    }

    /**
     * 数据生产
     */
    public void producer() {

        /**
         * 数据返回类型为一个对象
         */
        try {

            List<Contact> contacts=in.read(Contact.class);

            //读取通讯录的数据
            while ( flg ){

                int call1Index=new Random().nextInt(contacts.size());
                int call2Index;
                while (true){
                    call2Index=new Random().nextInt(contacts.size());
                    if (call1Index!=call2Index){
                       break;
                    }
                }

                Contact call1=contacts.get(call1Index);
                Contact call2=contacts.get(call2Index);

                //生成随机的通话时间
                String startDate="20180101000000";  //开始时间
                String endDate="20190101000000";    //结束时间

                long startTime= DataUtil.parse(startDate,"yyyyMMddHHmmss").getTime();
                //通话时间
                long endtime=DataUtil.parse(endDate,"yyyyMMddHHmmss").getTime();

                //通话时间字符串
                long  calltime=startTime+(long)((endtime-startTime)* Math.random());
                //通话时间字符串
                String callTimeString=DataUtil.format(new Date(calltime),"yyyyMMddHHmmss");

                //生成随机的通话时长
                 String duration= NumberUtil.format(new Random().nextInt(3000),4);

                //生成通话记录
                Callog log=new Callog(call1.getTel(),call2.getTel(),callTimeString,duration);
                System.out.println(log);
                //将通话记录写入到数据文件中
                out.write(log);
                Thread.sleep(500);
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    /**
     * 关闭生产者
     * @throws IOException
     */
    public void close() throws IOException {

        if (in!=null){

            in.close();
        }
        if (out!=null){
            out.close();
        }

    }
}
